// 映射类型
// 获取一个类型，并排除其中的某些类型
interface Todo {
  title: string;
  completed: boolean;
  description: string;
  remark: string;
  todoNum: number;
}
// [P in keyof T as Exclude<P, K>]是重映射的写法，as是在in循环后，再进行类型推断，后面的Exclude类型排除。
// 排除 P类型 中符合 K 的那些属性名联合类型。
// type Omit<T, K extends keyof T> = { [P in keyof T as Exclude<P, K>]: T[P] }
// Omit源代码keyof any 等价于 PropertyKey 等于 string | number | symbol
type Omitt<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>

type MyOmit = Omit<Todo, 'todoNum' | 'remark'>
// type MyOmit = { title: string; completed: boolean; description: string; }
export {}